package com.tedu.api.list;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * Collection【接口】顶级集合容器
 * List【接口】继承与Collection【接口】
 * List集合：存储重复并且有序的元素
 * 注意：List集合类似数组，有些方法与数组使用一致
 * List集合【接口】
 * java.util.ArrayList：数组实现【常用】
 * java.util.LinkedList：链表实现
 * 以上两个类使用方法完全一致
 */
public class ListAPI {
    /**List接口--提供get方法，可以被ArrayList类重写
     * get(int index)   返回值：E
     * 作用：根据下标获取集合元素
     */
    @Test
    public void testGet(){
        //多态方式：父类引用指向子类对象【常用：调父、子方法，方法相同：重写】
        //重写调用子类的方法，如果子类没有重写，调用父类的方法
        /*List<String> list=new ArrayList<>();
        list.get(0);//重写：调用子类的get方法
        //直接创建实现类对象:调用 ArrayList方法
        ArrayList<String> al=new ArrayList<>();
        al.get(0);*/
        List<String> list=new ArrayList<>();
        list.add("西游记"); list.add("水浒传");list.add("红楼梦");
        System.out.println("打印List集合："+list);
        //获取下标：1
        String index=list.get(1);
        System.out.println("取出集合元素："+index);
        //遍历集合内容---普通for
        for (int i=0;i<list.size();i++){  //i  下标 0 1 2
            index=list.get(i);
            System.out.println("获取集合全部元素："+index);
        }

    }
    /**List接口下方法
     * 添加、替换、移除
     * add(int index,E e)方法         返回值：void   重载方法
     * 作用：将给定元素插入到指定位置
     * set(int index,E e)方法         返回值：E
     * 作用：将给定元素设置到指定的位置上【替换】
     * remove(int index)方法          返回值：E      重载方法
     * Collection接口remove使用方法一致,用元素删除
     * List接口remove方法，用下标删除
     * -----------------总结：以上三个方法都可以直接操作集合
     */
    @Test
    public void testASR(){
        List<String> list=new ArrayList<>();
        list.add("one"); list.add("two"); list.add("three");
        //需求：在集合  to元素前  添加 “2”
        list.add(1,"2");
        System.out.println("插入元素的集合："+list);
        //需求：在集合 2 元素  将2元素替换成  二
        list.set(1,"二");
        System.out.println("修改元素的集合："+list);
        //需求：删除集合中“二”的元素
        list.remove("二");//Collection接口remove,通过元素，删元素
        list.remove(1);//List接口remove,通过下标，删元素
        System.out.println("删除元素的集合："+list);
    }
}
